import 'package:flutter_basic_learning/utils/CommonWidget.dart';
import 'package:get/get.dart';

class GetViewDataShareController extends GetxController {
  RxInt count = 0.obs;

  @override
  void onInit() {
    super.onInit();
    printLog('''
    触发时机：
      controller 挂载到页面时触发的生命周期函数，应避免在此函数做耗时操作，影响启动速度
    主要用途：
      1、依赖注入初始化 
      2、变量初始化 
      3、加载本地数据 
      4、设置默认值
    总结
      onInit() 是 GetXController 生命周期中的第一个方法，适用于：
      依赖注入 - 获取所需的服务和依赖
      变量初始化 - 设置响应式变量的初始值
      集合初始化 - 初始化列表、映射等数据结构
      本地数据加载 - 从本地存储加载配置和设置
      默认值设置 - 配置控制器的初始状态
      监听器设置 - 建立事件监听和回调机制
    记住：
      只进行同步初始化操作
      避免使用 await
      异步操作应放在 onReady() 中
      始终调用 super.onInit()
      按照正确的顺序进行初始化
      这样可以确保 Controller 能够快速创建并准备好使用。
    ''');
  }

  @override
  void onReady() {
    super.onReady();
    printLog('''
    触发时机:
      Controller 初始化完成且 UI 第一次渲染完成后调用,只执行一次，此时可以安全的执行需要UI上下文的操作
    主要用途：
      1. 网络数据加载
      2. 启动定时任务
      3. 订阅事件和流 
      4. 显示初始对话框或提示
      5. 初始化第三方服务
      6. 执行需要 UI 上下文的操作
      7. 数据同步操作
    总结：
      onReady() 是 GetXController 中非常重要的生命周期函数，适用于：
      网络数据加载 - 不阻塞UI渲染
      后台任务启动 - 定时器、数据监听等
      UI相关初始化 - 对话框、教程等
      第三方服务初始化 - SDK、分析服务等
      权限检查和处理
      用户偏好加载
      数据同步操作
      正确使用 onReady() 可以提升应用性能和用户体验。
    ''');
  }

  @override
  void onClose() {
    super.onClose();
    printLog("""
    触发时机:
      当调用 Get.delete<Controller>() 时
      当页面关闭且 Controller 不再被需要时
      当应用重置或重启时
      当手动移除 Controller 时
    主要用途:
      1. 关闭网络连接
      2. 取消流订阅
      3. 停止定时器
      4. 保存数据到本地
      5. 释放资源和内存
      6. 通知其他组件
      7. 取消 API 请求
    总结:
      onClose() 函数是 GetXController 生命周期中非常重要的清理阶段，主要用于：
      资源释放：关闭连接、释放内存
      取消订阅：停止流监听、定时器等
      数据保存：将重要数据持久化
      状态通知：告知其他组件状态变化
      防止内存泄漏：确保所有资源都被正确释放
      正确实现 onClose() 可以显著提高应用的性能和稳定性。
    """);
  }

  void increase() {
    count++;
    //调用update()方法，才会触发Obx函数
    update();
  }

  void decrease() {
    count--;
    update();
  }
}
